package com.wx.processor;

import com.wx.bean.People;
import com.wx.bean.TulingLog;
import com.wx.multicaster.MyApplicationEventMulticaster;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.core.Ordered;
import org.springframework.core.PriorityOrdered;

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
	/**
	 * 执行时间点: 所有的 Bean 定义信息 [将要被加载到容器中]，Bean 实例还没有被初始化
	 */
	@Override
	public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
		System.out.println("MyBeanDefinitionRegistryPostProcessor 的 postProcessBeanDefinitionRegistry 方法");
		System.out.println("1.BeanDefinition 的数量: " + registry.getBeanDefinitionCount());
		RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TulingLog.class);
		registry.registerBeanDefinition("tulingLog", rootBeanDefinition);

//		RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(MyApplicationEventMulticaster.class);
//		registry.registerBeanDefinition("applicationEventMulticaster", rootBeanDefinition);
	}

	/**
	 * 执行时间点: 所有的 Bean 定义信息 [已经加载到容器中]，但是 Bean 实例还没有被初始化，可以修改容器中的 BeanDefinition
	 */
	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		System.out.println("MyBeanDefinitionRegistryPostProcessor 的 postProcessBeanFactory 方法");
		System.out.println("2.BeanDefinition 的数量: " + beanFactory.getBeanDefinitionCount());
	}
}
